{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\importlib\\_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n",
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\importlib\\_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "import os\n",
    "import numpy \n",
    "import pandas\n",
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import accuracy_score\n",
    "from matplotlib import pyplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = 'C:\\\\Users\\\\62744\\\\Desktop\\\\homework3\\\\'\n",
    "data = pandas.read_csv(path+'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['bathrooms', 'bedrooms', 'price', 'price_bathrooms', 'price_bedrooms',\n",
      "       'room_diff', 'room_num', 'Year', 'Month', 'Day',\n",
      "       ...\n",
      "       'virtual', 'walk', 'walls', 'war', 'washer', 'water', 'wheelchair',\n",
      "       'wifi', 'windows', 'work'],\n",
      "      dtype='object', length=227) <class 'pandas.core.indexes.base.Index'>\n"
     ]
    }
   ],
   "source": [
    "y_train = data['interest_level']\n",
    "x_train = data.drop('interest_level', axis = 1)\n",
    "# print(x.shape)\n",
    "columns = x_train.columns\n",
    "print(columns, type(columns))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, x_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(x_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(x_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=10,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, x_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pandas.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
